Inner Factory

내부 팩토리는 생성할 타입의 내부 클래스로서 존재하는 팩터리를 말한다.
friend 키워드가 없는 C#, Java등에서 많이 사용한다.(C++에서도 캡슐화를 위해 friend 대신 사용할 수 있다.)
struct Point{
private:
Point(float x, float y): x(x), y(y) {}
// Inner Factory
struct PointFactory{
private:
PointFactory() {}
public:
static Point NewCartesian(float x, float y){
return {x, y};
}
static Point NewPolar(float r, float theta){
return {r*cos(theat), r*sin(theta)};
}
};
public:
float x, y;
static PointFactory Factory;
};
Inner Factory는 Factory가 여러 타입(클래스)를 활용해서 객체를 생성해야 할 때, 적합하지 않다.

class의 생성자가 private에 선언되어 있기 때문에 객체로 접근할 수가 없다.
대신 Factory를 static으로 선언하여 아래와 같이 접근해서 사용한다.
(객체를 직접 생성, 직접 생성자 호출은 금지함)
auto pp=Point::Factory.NewCartesian(2, 3);
혹은, Factory 클래스를 public에 선언한 경우,
auto pp=Point::PointFactory::NewCartesian(2, 3);